package com.huang.leetcode.doublePointer;

import com.huang.leetcode.constant.ListNode;

/**
 * @Author：CreateSequence
 * @Date：2020-07-26 14:18
 * @Description：删除链表的倒数第N个节点
 */
public class PB19 {

    public ListNode removeNthFromEnd(ListNode head, int n) {
        //添加前置节点方便边界处理
        ListNode pre = new ListNode(-1);
        pre.next = head;
        ListNode start = pre, end = pre;

        //start先走n步，由于有前置节点，所以现在指向的其实是n-1节点
        while (n-- != 0) {
            start = start.next;
        }

        //让start与end同时后移,当指针start的移动到倒数length-1的位置的时候，的时候end即指向倒数第n-1个节点
        while (start.next != null) {
            start = start.next;
            end = end.next;
        }
        //删除n节点
        end.next = end.next.next;

        return pre.next;
    }

}
